package br.infotec.musicaunb.domain;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.search.annotations.DocumentId;
import org.springframework.data.jpa.domain.AbstractPersistable;
/**
 * entidade representando Turma
 * @author eduardo
 *
 */
@Entity
@Table(name="turma")
public class Turma extends AbstractPersistable<Integer> implements AbstraticPojo{
	
	private static final long serialVersionUID = -8218419458759942020L;
	
	// atributos originais
	private String codigo;
	private Integer ano;
	private Integer semestre;
	// atributos relacionais
	
	// atributos herdados
	private List<Aluno> alunos;
	private Curso curso;
	private Professor professor;
	private Sala sala;
	private List<Instrumento> instrumentos;
				
	@Override
	@DocumentId
	@GeneratedValue
	@Column(name="id_turma")
	public Integer getId() {
		return super.getId();
	}
	
	@Column
	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	@Column
	public Integer getAno() {
		return ano;
	}

	public void setAno(Integer ano) {
		this.ano = ano;
	}
	
	@Column
	public Integer getSemestre() {
		return semestre;
	}

	public void setSemestre(Integer semestre) {
		this.semestre = semestre;
	}
	
	@ManyToOne
	@JoinColumn(name = "id_curso")
	public Curso getCurso() {
		return curso;
	}

	public void setCurso(Curso curso) {
		this.curso = curso;
	}
	
	@ManyToOne
	@JoinColumn(name = "id_sala")
	public Sala getSala() {
		return sala;
	}
	
	public void setSala(Sala sala) {
		this.sala = sala;
	}
	
	@OneToMany(mappedBy = "turma")
	public List<Aluno> getAlunos() {
		return alunos;
	}
	public void setAlunos(List<Aluno> alunos) {
		this.alunos = alunos;
	}
	
	@ManyToOne
	@JoinColumn(name = "id_professor")
	public Professor getProfessor() {
		return professor;
	}

	public void setProfessor(Professor professor) {
		this.professor = professor;
	}
	
	@ManyToMany
	@JoinTable(name = "instrumento_has_turma", joinColumns = { @JoinColumn(name = "id_turma") }, inverseJoinColumns = { @JoinColumn(name = "id_instrumento") })
	public List<Instrumento> getInstrumentos() {
		return instrumentos;
	}

	public void setInstrumentos(List<Instrumento> instrumentos) {
		this.instrumentos = instrumentos;
	}
	
	
}
